/**
 * PowerShell打印示例
 * 这个示例展示了如何使用PowerShell打印各种类型的文件
 */

const PrintService = require('../services/printService');
const fs = require('fs').promises;
const fsSync = require('fs');
const path = require('path');
const util = require('util');
const exec = util.promisify(require('child_process').exec);

// 示例打印函数
async function printExample() {
  try {
    console.log('===== PowerShell打印示例开始 =====');
    
    // 1. 获取系统打印机
    console.log('1. 获取系统打印机列表...');
    const printers = await PrintService.getSystemPrinters();
    
    if (printers.length === 0) {
      console.error('没有找到可用的打印机，请先安装打印机');
      return;
    }
    
    // 选择第一个可用打印机
    const printer = printers.find(p => p.isReady) || printers[0];
    console.log(`将使用打印机: ${printer.name} (${printer.statusText})`);
    
    // 2. 创建临时测试文件
    const tempDir = path.join(process.cwd(), 'temp', `example_${Date.now()}`);
    await fs.mkdir(tempDir, { recursive: true });
    console.log(`创建临时目录: ${tempDir}`);
    
    // 2.1 创建文本文件
    const textFilePath = path.join(tempDir, 'test.txt');
    await fs.writeFile(textFilePath, '这是一个测试文档\n用于PowerShell打印测试\n包含中文字符');
    console.log(`创建文本文件: ${textFilePath}`);
    
    // 2.2 创建Word文档的测试必须依赖外部文件
    // 这里只是举例，实际应该提前准备好测试文档
    console.log('请准备好Word文档(.docx文件)用于测试');
    
    // 3. 验证打印机状态
    console.log('3. 验证打印机状态...');
    const validation = await PrintService.validatePrinterConnection(printer.name);
    console.log('打印机状态:', validation);
    
    if (validation.exists && validation.isReady) {
      // 4. 打印文本文件
      console.log('4. 打印文本文件...');
      const textResult = await PrintService.printWithPowerShell(textFilePath, printer.name);
      console.log('文本文件打印结果:', textResult);
    }
    
    // 5. 询问是否有Word文档进行测试
    console.log('\n是否有Word文档要测试打印？');
    console.log('如果有，请输入Word文档的完整路径，否则按回车键跳过');
    
    // 这里为了示例，使用一个硬编码的路径，实际使用时可以使用命令行参数或者配置文件
    const wordFilePath = process.env.WORD_TEST_FILE || '';
    
    if (wordFilePath && fsSync.existsSync(wordFilePath)) {
      console.log(`5. 打印Word文档: ${wordFilePath}`);
      if (validation.exists && validation.isReady) {
        const wordResult = await PrintService.printWithPowerShell(wordFilePath, printer.name);
        console.log('Word文档打印结果:', wordResult);
      }
    } else {
      console.log('跳过Word文档打印测试');
    }
    
    // 6. 清理临时文件
    console.log('6. 清理临时文件...');
    await fs.rm(tempDir, { recursive: true, force: true });
    console.log('临时文件已清理');
    
    console.log('===== PowerShell打印示例结束 =====');
  } catch (error) {
    console.error('打印示例执行失败:', error);
  }
}

// 执行示例
printExample().catch(error => {
  console.error('示例执行出错:', error);
}); 